home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 5
/
Aminet 5 - March 1995.iso
/
Aminet
/
util
/
rexx
/
ScionToMosaic.lha
/
ScionToMosaic.rexx
Wrap
OS/2 REXX Batch file
|
1994-10-08
|
56KB
|
1,571 lines
/* © Harold H. Ipolyi 11 June 1994
Requires ScionGenealogist V 3.13+
-------------------------------README----------------------------------------
Short: ScionGenealogist > Mosaic.html
Type: util/rexx
Uploader: ipolyi@pat.mdc.com
Author: Harold H. Ipolyi, P.O.Box 891206, Houston, Tx 77289-1206
Release History:
11 Jun 1994 . ScionGenealogist V 3.06
Rev01: 19 Jun 1994 . MakeDir(Gdir) fixed; extra comments processed.
Rev02: 25 Jun 1994 . Fixed descenders; Women in List italicised
. ScionGenealogist V 3.13
Rev03: 3 Sep 1994 . Replace occurrences of "<ScionIRN>" by Data Base NAMES
. e.g. Replace any <101> by Iam Onehundredone, Jr.
. Added Family Info file processing; Ancestor trees
. Added descendant charts
. Women italicised; men boldface everywhere
. Added creation of a textual file "GenealogyOf..."
Arexx script to convert ScionGenealogist data base to Mosaic hypertext format.
WHY? some others in my family don't have Amigas.
ScionGenealogist is easy to use, comprehensive, and
provides Arexx ports for extracting data.
An ARexx script can repeatedly and painlessly recreate Mosaic
.html files from entries in the ScionGenealogist data base.
Mosaic is an available common method of presentation.
TESTED: on Amiga3000 Kickstart v.37.175 Workbench v.38.35
& Amiga3000 Kickstart v.40.68 Workbench v.40.42
w/ ScionGenealogist V 3.06 & Mosaic1.2beta_NoNet
w/ ScionGenealogist V 3.13 & Mosaic1.2_NoNet
Mosaic .html file compatibility tested on Sun NCSA Mosaic
-------------------------------README----------------------------------------
-----------------------------------------------------------------
| This Script is somewhat dependent on the following conventions |
| that I followed in my ScionGenealogist data base: |
| |
| · lastnames are kept pure (no honorifics, Jr's, III's ) |
| |
| · given names have any and all honorifics AFTER a COMMA |
| |
| for example: LastName FirstNames, honorifics |
| |
| BAUER-GAUSS Joseph, Dr. |
| DAGLEY Richard Kelley, Jr. |
| |
|-----------------------------------------------------------------|
| |
| For a name change (NOT maidenname > marriedname), try this: |
| New Birth Name > Changed To, Ph. D. |
| which lists as: Birth Name > Changed To New, Ph. D. |
| |
-----------------------------------------------------------------
«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«
«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
»«»« »«»«
«»«» GetLastName: PROCEDURE at end of script capitalizes Last Names »«»«
«»«» ------------------------------------------------------------- «»«»
»«»« | it can also be used to handle "non-conforming" Last Names | »«»«
«»«» | e.g. "MAC ISAAC" --> "MacISAAC" | «»«»
»«»« | "VON NUEMANN" --> "VonNuemann" | »«»«
«»«» ------------------------------------------------------------- «»«»
»«»« BUT: you must add the additional tests yourself (it's easy!) »«»«
«»«» «»«»
«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«
«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
|-----------------------------------------------------------------|
| |
| · all dates are in the author's suggested form: 8 Jul 1939 |
| |
| ( not only is 7/8/39 ambigous, it will also break ) |
| ( my .html file naming convention in a big way ) |
| |
| ( To any who may ask: it would be easy code around, ) |
| ( but the form suggested by ScionGenealogist author ) |
| ( Robbie J Akins makes much more sense to me! ) |
| |
| · if Death Date is blank; Death Place can be a COMMENT field |
| e.g. Phone # |
| · if Burial Date is blank; Burial Place can be a COMMENT field |
| e.g. Address |
-----------------------------------------------------------------
* Running 'rx ScionToMosaic.rexx' gives further directions
* Briefly, · start ScionGenealogist and load a data base
* · 'assign Genealogy: '{Scion data base directory}
* · start a Shell, cd to wherever you have or wish to have
* the directory of Mosaic .html's
* · 'rx ScionToMosaic.rexx Normal' to automagically create a
* Mosaic .html file for each person in your
* ScionGenealogist data base; following the TEMPLATE:
############# begin genealogytemplate.html #########################
<HTML>
<TITLE>PERSON Data Sheet</TITLE>
<H2>PERSON (PERSONGENDER) <A HREF="PERSONI.html"><I>more info</I></A> (())
<A href="Genealogy/GenealogyFile.html"><B>List of persons.</B></A></H2>
<H3>
Born: BIRTHDATE * BIRTHPLACE <BR>
Died: DEATHDATE + DEATHPLACE . Buried: BURIALPLACE <BR>
</H3>
<HR> /* NEW FORMAT BELOW */
<H3>Immediate Family of <I>PERSON</I></H3>
<PRE><TT>
<A HREF="FATHER.html">FATHER</A>_//\_<A HREF="MOTHER.html">MOTHER</A> & MARRIAGEDATE @ MARRIAGEPLACE
| <A HREF="Family#I.html"><I>family info</i></A>
|_____ <A HREF="Sibling1.html">Sibling1</A> (Sibling1GENDER) * Sibling1BIRTHDATE
|_____ <A HREF="SiblingN.html">SiblingN</A> (SiblingNGENDER) * SiblingNBIRTHDATE
|
<B>PERSON</B>_//\_<A HREF="SPOUSE1.html">SPOUSE1</A> & MARRIAGE1DATE @ MARRIAGE1PLACE
| | | <A HREF="Family#I.html"><I>family info</i></A>
| | |_____ <A HREF="mFGRn1c1.html">mFGRn1c1</A> (mFGRn1c1GENDER) * mFGRn1c1BIRTHDATE
| | |_____ <A HREF="mFGRn1cN.html">mFGRn1cN</A> (mFGRn1cNGENDER) * mFGRn1cNBIRTHDATE
| |
| |_//\_<A HREF="SPOUSE2.html">SPOUSE2</A> & MARRIAGE2DATE @ MARRIAGE2PLACE
| | <A HREF="Family#I.html"><I>family info</i></A>
| |_____ <A HREF="mFGRn2c1.html">mFGRn2c1</A> (mFGRn2c1GENDER) * mFGRn2c1BIRTHDATE
| |_____ <A HREF="mFGRn2cN.html">mFGRn2cN</A> (mFGRn2cNGENDER) * mFGRn2cNBIRTHDATE
|
|_//\_<A HREF="SPOUSEN.html">SPOUSEN</A> & MARRIAGENDATE @ MARRIAGENPLACE
| <A HREF="Family#I.html"><I>family info</i></A>
|_____ <A HREF="mFGRnNc1.html">mFGRnNc1</A> (mFGRnNc1GENDER) * mFGRnNc1BIRTHDATE
|_____ <A HREF="mFGRnNcN.html">mFGRnNcN</A> (mFGRnNcNGENDER) * mFGRnNcNBIRTHDATE
</TT><PRE>
<HR>
<H3>Ancestors of <I>PERSON</I></H3>
<TT>
- <A HREF="GREATGRANDFATHER.html"><B>GREATGRANDFATHER</A> (FFF) * BIRTHDATE + DEATHDATE</B>
- <A HREF="GRANDFATHER.html"><B>GRANDFATHER</A> (FF) * BIRTHDATE + DEATHDATE</B>
- <A HREF="GREATGRANDMOTHER.html"><I>GREATGRANDMOTHER</A> (FFM) * BIRTHDATE + DEATHDATE</I>
- <A HREF="FATHER.html"><B>FATHER</A> (F) * BIRTHDATE + DEATHDATE</B>
- <A HREF="GREATGRANDFATHER.html"><B>GREATGRANDFATHER</A> (FMF) * BIRTHDATE + DEATHDATE</B>
- <A HREF="GRANDMOTHER.html"><I>GRANDMOTHER</A> (FM) * BIRTHDATE + DEATHDATE</I>
- <A HREF="GREATGRANDMOTHER.html"><I>GREATGRANDMOTHER</A> (FMM) * BIRTHDATE + DEATHDATE</I>
<H2>PERSON * BIRTHDATE + DEATHDATE</H2>
- <A HREF="GREATGRANDFATHER.html"><B>GREATGRANDFATHER</A> (MFF) * BIRTHDATE + DEATHDATE</B>
- <A HREF="GRANDFATHER.html"><B>GRANDFATHER</A> (MF) * BIRTHDATE + DEATHDATE</B>
- <A HREF="GREATGRANDMOTHER.html"><I>GREATGRANDMOTHER</A> (MFM) * BIRTHDATE + DEATHDATE</I>
- <A HREF="MOTHER.html"><I>MOTHER</A> (M) * BIRTHDATE + DEATHDATE</I>
- <A HREF="GREATGRANDFATHER.html"><B>GREATGRANDFATHER</A> (MMF) * BIRTHDATE + DEATHDATE</B>
- <A HREF="GRANDMOTHER.html"><I>GRANDMOTHER</A> (MM) * BIRTHDATE + DEATHDATE</I>
- <A HREF="GREATGRANDMOTHER.html"><I>GREATGRANDMOTHER</A> (MMM) * BIRTHDATE + DEATHDATE</I>
</TT></PRE>
<HR>
<H3>
a template to represent Genealogy data in Mosaic hypertext.<BR>
* replace all ocurrences of each appropriate ITEM with ACTUAL DATA<BR>
e.g. search-replace-all PERSON with: My Name<BR>
e.g. query-search-replace MOTHER with: My Mother's Name<BR>
* judiciously edit .html file names in anchors<BR>
* add/remove lines for children, siblings, spouses as necessary<BR>
<BR>
bugs: I'm assuming more than 8 char file names (works in UNIX & my Amiga)<BR>
<BR>
for discussion: how should files be named to uniquely identify individuals?<BR>
<BR>
e.g. I have at least 3 Franz Ruff's (uncle, grandF, great-grandF)<BR>
these are most likely not other's Franz Ruff's<BR>
<BR>
if known, birth dates could be used: "Franz Ruff 18460521.html"<BR>
or my preferred form: "FrRuff21May1846.html"<BR>
( this is working well in a REXX script I am generating )<BR>
( to translate my >400 person data base to Mosaic.html )<BR>
( on an Amiga3000 from ScionGenealogist using ARexx )<BR>
<BR>
even these may not be unique :(
</H3>
</HTML>
############### end genealogytemplate.html #####################################
* In a Mosaic file (maybe HOME PAGE) have an anchor pointing to GenealogyFile:
<A href="file://localhost/Doc:Mosaic/DBNAMEGenealogy/GenealogyFile.html">
Genealogy</A>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^ assumes you ran 'rx ScionToMosaic.rexx Normal' in directory: Doc:Mosaic ^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* You might also create an {MyGenealogy}.html file yourself in directory
* Doc:Mosaic/DBNAMEGenealogy as a starting point, with the anchor of
<A href="file://localhost/Doc:Mosaic/DBNAMEGenealogy/MyGenealogyFile.html">
My Genealogy</A>
e.g.:
_____________________________________________________________
<TITLE>FirstName LastName Genealogy </TITLE>
<H1>FirstName LastName Genealogy</H1>
<HR>
<A HREF="GenealogyFile.html">List of Persons.</A><P>
This is the genealogy of
<A href="FiLast8Jul1939.html">FirstName LastName</A>.
_____________________________________________________________
^^^^^^^^^^^^^^
* Note the convention of first 2 characters from FirstName
* first 4 characters from LastName
* & BirthDate (with all blanks removed)
*
* If the BirthDate is not entered, the convention is:
* first 2 characters from FirstName
* first 6 characters from LastName
* & ScionGenealogist IRN
*
* The PN{IRN}.DBNAME files are used to generate the "more info" files.
* Whenever the PN{IRN}.DBNAME is changed or replaced, the corresponding
* "more info" file will be updated if 'rx ScionToMosaic.rexx {IRN}' is re-run.
* TO DO: picture file anchors? PP{IRN}.DBNAME? ILBM not portable. Convert?
*/
/* add libraries */
libs = 'rexxsupport.library rexxarplib.library'
DO i = 1 TO Words(libs)
lib = Word(libs,i)
IF ~Show('Lib',lib) THEN DO
IF EXISTS('LIBS:'lib) then call addlib lib, 0, -30
ELSE DO
'message "===> cannot find' lib 'in LIBS:"'
EXIT 10
END
END
END i
IF ~Show(p,'SCIONGEN') THEN DO
SAY ' '
SAY ' Cannot proceed because ScionGenealogist is NOT currently running:'
SAY ' '
SAY ' 1. Please start ScionGenealogist and'
SAY ' '
SAY ' 2. load the desired data base. Then:'
SAY ' '
SAY ' 3. rx ScionToMosaic.rexx Normal'
SAY ' '
EXIT
END
Address "SCIONGEN" /* Point at Scion Genealogist port */
options RESULTS
'GETDBNAME' /* Issue GET DB NAME command to Scion Genealogist */
DBNAME = RESULT
PARSE ARG target
DO WHILE target = ""
SAY ' '
SAY ' Enter "Normal" to recreates all PERSON.html files; or'
SAY ' '
SAY ' a 'DBNAME' Scion data base "IRN" to recreate a specific PERSON.html file.'
SAY ' '
PULL target
/* EXIT */
/* ELSE target = Upper(target) */
target = Upper(strip(target,,'"')) /* just in case, remove errant quotes */
END
IF target = 'Q' | target = 'EXIT' | target = 'QUIT' THEN
EXIT
IF target = '?' | target = 'H' | target = 'HELP' THEN DO
SAY ' '
SAY ' please send comments, questions to:'
SAY ' '
SAY ' ipolyi@pat.mdc.com'
SAY ' or:'
SAY ' Harold H. Ipolyi '
SAY ' P.O.Box 891206 '
SAY ' Houston, Tx 77289-1206 '
SAY ' '
SAY ' /¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\'
SAY ' Convert ScionGenealogist data base to Mosaic .html hypertext. '
SAY ' \_______________________________________________________________/'
SAY ' '
SAY ' Usage: rx ScionToMosaic.rexx Normal {recreates all PERSON.html files}'
SAY ' rx ScionToMosaic.rexx IRN {recreates a specific PERSON.html file}'
SAY ' '
EXIT
END
IF target = 'N' THEN
target = 'NORMAL'
IF target = 'T' THEN
target = 'TEST'
/* SAY target */
'GETPROGVERSION'
VERSION = RESULT
IF VERSION < 3.13 THEN DO
SAY ' '
say ' Requires VERSION = 3.13 or greater'
SAY ' '
EXIT
END
/* ??? GETDBDIRPATH ??? of Scion data base */
SAY ' '
Say ' Testing: is data base assignment of Genealogy:'DBNAME' visible?'
SAY ' '
PRAGMA('w','n')
IF ~Exists("Genealogy:"DBNAME) THEN DO
SAY ' Genealogy:'DBNAME' not found,'
SAY ' '
SAY " Please create an assign to data base "DBNAME"'s directory:"
SAY ' '
SAY ' assign Genealogy: {Volume:Directory}'
SAY ' '
EXIT
END
PRAGMA('w','w')
Gdir = DBNAME'Genealogy'
Tdir = DBNAME'Text'
IF ~Makedir(Gdir) THEN DO
SAY ' '
SAY ' ===> unable to create directory: 'Gdir
SAY ' '
EXIT
END
IF ~Makedir(Tdir) THEN DO
SAY ' '
SAY ' ===> unable to create directory: 'Tdir
SAY ' '
EXIT
END
'GETTOTALIRN' /* Issue command to Scion Genealogist */
TOTALIRN = RESULT
Say "Number of people in database " DBNAME " = " TOTALIRN
SAY ' '
'GETPERSLABEL' 1
PERSLABEL1 = RESULT
'GETPERSLABEL' 2
PERSLABEL2 = RESULT
'GETPERSLABEL' 3
PERSLABEL3 = RESULT
'GETFAMLABEL' 1
FAMLABEL1 = RESULT
'GETFAMLABEL' 2
FAMLABEL2 = RESULT
IF IsNumeric(target) THEN
DO
Say 'Processing person ' target ' of ' TOTALIRN ' in database ' DBNAME
IF target <= TOTALIRN THEN DO
/* Open('GenealogyText',Tdir'/GenealogyOf'target,'w') */
Open('GenealogyText',Tdir'/G'target,'w')
CALL MakeOne(target)
Close('GenealogyText')
END
END
ELSE
DO
target = Upper(target)
IF target = "TEST" THEN DO
DO i = 1 TO 7
/* Open('GenealogyText',Tdir'/GenealogyOf'i,'w') */
Open('GenealogyText',Tdir'/G'i,'w')
CALL MakeOne(i)
Close('GenealogyText')
END
END
ELSE
DO
Say "Processing all " TOTALIRN " persons in database " DBNAME
/* GenealogyFile.html is a Scion data base IRN order list of all persons in
Mosaic .html format, format:
person * birthdate + deathdate (()) father //\ mother */
Say 'Mosaic file name: 'Gdir'/GenealogyFile.html for: List of Persons.'
Open('GenealogyFile',Gdir'/GenealogyFile.html','w')
WriteLn('GenealogyFile','<HTML>')
WriteLn('GenealogyFile','<TITLE>List of Persons.</TITLE>')
WriteLn('GenealogyFile','<H2>List of Persons in data base "'DBNAME'". <B>'Time()' - 'Date()'</B></H2>')
WriteLn('GenealogyFile','<H3>')
Open('GenealogyText',Tdir'/GenealogyOf'DBNAME,'w')
WriteLn('GenealogyText','Genealogy Data Base "'GetLastName(DBNAME)'"')
WriteLn('GenealogyText','')
WriteLn('GenealogyText','-----------------------------------------------------------')
WriteLn('GenealogyText','')
DO i = 1 TO TOTALIRN
CALL MakeOne(i)
END
WriteLn('GenealogyFile','</H3>')
WriteLn('GenealogyFile','<HR>')
WriteLn('GenealogyFile','<Address>')
'GETPROGVERSION'
VERSION = RESULT
WriteCh('GenealogyFile','<H3>ScionGenealogist')
IF VERSION > 0 THEN WriteCh('GenealogyFile',' V 'VERSION)
WriteLn('GenealogyFile',' © Robbie J Akins; ')
WriteLn('GenealogyFile','Scion'VERSION'ToMosaic.rexx © Harold Ipolyi</H3>')
WriteLn('GenealogyFile','</Address>')
WriteLn('GenealogyFile','</HTML>')
END
Say ' '
ThisPath = PRAGMA('d')
IF Substr(ThisPath,Length(ThisPath),Length(ThisPath)) ~= ":" THEN ThisPath = ThisPath'/'
Say ' ---------------------------------------------------------------------'
Say ' If you have not already done so, add the following anchor pointing to'
Say ' "'GetLastName(DBNAME)' Genealogy" to a Mosaic file (maybe HOME PAGE):'
Say ' ---------------------------------------------------------------------'
Say ' <A href="/'ThisPath||Gdir'/GenealogyFile.html">'GetLastName(DBNAME)' Genealogy</A>'
Say ' ------------------------------------------------------------------'
END
SAY ' '
Say 'ScionToMosaic.rexx completed normally'
EXIT
/*************************************************************************/
MakeOne: PROCEDURE EXPOSE target DBNAME Gdir Tdir FAMLABEL1 FAMLABEL2 PERSLABEL1 PERSLABEL2 PERSLABEL3
PARSE ARG ScionIRN
'EXISTPERSON' ScionIRN
/**/
if RESULT = 'YES' THEN DO
/**/
HasFileFATHER = 0
HasFileMOTHER = 0
HasMOTHER = 0
HasFATHER = 0
HasPARENTS = 0
HasCHILDREN = 0
DoGenText = 0
'GETPARENTS' ScionIRN
PARENTS = RESULT
tPARENTSt = 't'PARENTS't'
/* Say 'PARENTS = 'PARENTS tPARENTSt ??? EXISTPARENTS IRN ??? */
IF tPARENTSt ~= 'tt' THEN HasPARENTS = 1
'GETMARRIAGE' ScionIRN 0 /* ??? GETTOTMARRIAGES IRN ??? */
MARRIAGE = RESULT
tMARRIAGESt = 't'MARRIAGE't'
/* Say 'MARRIAGES = 'MARRIAGE tMARRIAGESt */
IF tMARRIAGESt ~= 'tMARRIAGEt' THEN DO
mFGRN = MARRIAGE
'GETCHILD' mFGRN 0 /* ??? GETTOTCHILDREN FGRN ??? */
'EXISTPERSON' RESULT
if RESULT = 'YES' then HasCHILDREN = 1
END
/*
Say 'PARENTS = 'PARENTS tPARENTSt 'MARRIAGES = 'MARRIAGES tMARRIAGESt 'HasPARENTS = 'HasPARENTS 'HasCHILDREN = 'HasCHILDREN
*/
IF ( HasPARENTS + HasCHILDREN ) = 1 THEN DoGenText = 1
/**/
'GETLASTNAME' ScionIRN
LASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' ScionIRN
FIRSTNAME = RESULT
'GETSEX' ScionIRN
GENDER = translate(RESULT,xrange('a','z'),xrange('A','Z'))
thelastname = LASTNAME
thegender = GENDER
FULLNAME = GetFullName(FIRSTNAME)
MFULLNAME = MGetFullName(FIRSTNAME)
PFULLNAME = PGetFullName(FIRSTNAME)
'GETBIRTHDATE' ScionIRN
BIRTHDATE = RESULT
'GETBIRTHPLACE' ScionIRN
BIRTHPLACE = RESULT
'GETDEATHDATE' ScionIRN
DEATHDATE = RESULT
'GETDEATHPLACE' ScionIRN
DEATHPLACE = RESULT
'GETBURIALPLACE' ScionIRN
BURIALPLACE = RESULT
'GETPERSUSER1' ScionIRN
PERSUSER1 = CheckForReplacement(RESULT)
PERSUSERn1 = CheckForNAReplacement(RESULT)
'GETPERSUSER2' ScionIRN
PERSUSER2 = CheckForReplacement(RESULT)
PERSUSERn2 = CheckForNAReplacement(RESULT)
'GETPERSUSER3' ScionIRN
PERSUSER3 = CheckForReplacement(RESULT)
PERSUSERn3 = CheckForNAReplacement(RESULT)
IF target ~= "NORMAL" | BIRTHPLACE ~= "" | DEATHPLACE ~= "" | BURIALPLACE ~= "" | PERSUSER1 ~= "" | PERSUSER2 ~= "" | PERSUSER3 ~= "" THEN DoGenText = 1
/**/
IF LASTNAME = "" THEN DO
Say "Person " ScionIRN"'s last name is not defined; no new Mosaic file being created!"
RETURN
END
IF BIRTHDATE = "" THEN
PERSONFILENAME = Space(substr(FIRSTNAME,1,2) substr(LASTNAME,1,6) ScionIRN)
ELSE
PERSONFILENAME = Space(substr(FIRSTNAME,1,2) substr(LASTNAME,1,4) BIRTHDATE)
/**/
PfilN = Gdir'/'PERSONFILENAME
Say ''
Say 'Mosaic file: 'PfilN'.html for: 'FULLNAME' {'ScionIRN'}'
Open('PERSONFILE',PfilN'.html','w')
WriteLn('PERSONFILE','<HTML>')
WriteLn('PERSONFILE','<TITLE>'FULLNAME' Data Sheet</TITLE>')
WriteCh('PERSONFILE','<H2>'MFULLNAME)
/**/
IF Exists('Genealogy:PN'ScionIRN'.'DBNAME) THEN DO
Say 'Writing info file 'PfilN'I.html'
Open('PNDBNAME','Genealogy:PN'ScionIRN'.'DBNAME,'r')
Open('PERSONI',PfilN'I.html','w')
WriteLn('PERSONI','<HTML>')
WriteLn('PERSONI','<TITLE>'FULLNAME' Information</TITLE>')
WriteCh('PERSONI','<H2><A HREF="'PERSONFILENAME'.html">'MFULLNAME)
WriteCh('PERSONI','</A> Information. <A HREF="GenealogyFile.html">')
WriteLn('PERSONI','<B>List of Persons.</B></A></H2><PRE><TT>')
IF DoGenText THEN WriteLn('GenealogyText',PFULLNAME' Information.')
DO While ~EOF('PNDBNAME')
line = ReadLn('PNDBNAME')
WriteLn('PERSONI',CheckForReplacement(line))
IF DoGenText THEN WriteLn('GenealogyText',CheckForNAReplacement(line))
END
Close('PNDBNAME')
IF DoGenText THEN WriteLn('GenealogyText','')
WriteLn('PERSONI','</HTML>')
Close('PERSONI')
WriteCh('PERSONFILE',' (<A HREF="'PERSONFILENAME'I.html"><B>more info</B></A>)')
END
/**/
WriteLn('PERSONFILE',' <A HREF="GenealogyFile.html"><B>List of Persons.</B></A></H2><H3>')
IF DoGenText THEN DO
/* IF target ~= "NORMAL" THEN Say 'Printable file: 'Tdir'/GenealogyOf'ScionIRN' for 'FULLNAME' {'ScionIRN'}' */
IF target ~= "NORMAL" THEN Say 'Printable file: 'Tdir'/G'ScionIRN' for 'FULLNAME' {'ScionIRN'}'
WriteLn('GenealogyText','')
WriteLn('GenealogyText','-----------------------------------------------------------')
WriteLn('GenealogyText','')
WriteLn('GenealogyText',PFULLNAME' Data Sheet')
END
IF BIRTHDATE || BIRTHPLACE ~= "" THEN DO
WriteCh('PERSONFILE','Born: ')
IF BIRTHDATE ~= "" THEN WriteCh('PERSONFILE',BIRTHDATE)
IF BIRTHPLACE ~= "" THEN WriteCh('PERSONFILE',' * 'BIRTHPLACE)
WriteLn('PERSONFILE','<BR>')
IF BIRTHDATE ~= "" THEN IF DoGenText THEN WriteCh('GenealogyText','Born: 'BIRTHDATE)
IF BIRTHPLACE ~= "" THEN IF DoGenText THEN WriteCh('GenealogyText',' * 'BIRTHPLACE)
IF DoGenText THEN WriteLn('GenealogyText','')
END
IF DEATHDATE ~= "" THEN DO
WriteCh('PERSONFILE','Died: 'DEATHDATE' + 'DEATHPLACE)
IF DoGenText THEN WriteCh('GenealogyText','Died: 'DEATHDATE' + 'DEATHPLACE)
IF BURIALPLACE ~= "" THEN DO
WriteCh('PERSONFILE',' . Buried: 'BURIALPLACE)
IF DoGenText THEN WriteCh('GenealogyText',' . Buried: 'BURIALPLACE)
END
WriteLn('PERSONFILE','<BR>')
IF DoGenText THEN WriteLn('GenealogyText','')
END
ELSE DO
IF DEATHPLACE ~= "" THEN DO
WriteLn('PERSONFILE',DEATHPLACE'<BR>')
IF DoGenText THEN WriteLn('GenealogyText',DEATHPLACE)
END
IF BURIALPLACE ~= "" THEN DO
WriteLn('PERSONFILE',BURIALPLACE'<BR>')
IF DoGenText THEN WriteLn('GenealogyText',BURIALPLACE)
END
END
IF PERSUSER1 ~= "" THEN DO
WriteLn('PERSONFILE',PERSLABEL1': 'PERSUSER1'<BR>')
IF DoGenText THEN WriteLn('GenealogyText',PERSLABEL1': 'PERSUSERn1)
END
IF PERSUSER2 ~= "" THEN DO
WriteLn('PERSONFILE',PERSLABEL2': 'PERSUSER2'<BR>')
IF DoGenText THEN WriteLn('GenealogyText',PERSLABEL2': 'PERSUSERn2)
END
IF PERSUSER3 ~= "" THEN DO
WriteLn('PERSONFILE',PERSLABEL3': 'PERSUSER3'<BR>')
IF DoGenText THEN WriteLn('GenealogyText',PERSLABEL3': 'PERSUSERn3)
END
/* end of personal data; start family tree segment */
WriteLn('PERSONFILE','<HR>')
IF DoGenText THEN DO
WriteLn('GenealogyText','')
WriteLn('GenealogyText','-----------------------------------------------------------')
WriteLn('GenealogyText','')
END
WriteCh('PERSONFILE','<H3>Immediate Family of 'MFULLNAME'</H3>')
IF DoGenText THEN DO
WriteLn('GenealogyText','Immediate Family of 'PFULLNAME)
WriteLn('GenealogyText','')
END
WriteLn('PERSONFILE','<PRE><TT>')
/**/
IF HasPARENTS THEN DO
'GETPRINCIPAL' PARENTS
PRINCIPAL = RESULT
'GETSPOUSE' PARENTS
SPOUSE = RESULT
'GETMARRYDATE' PARENTS
PARENTSMARRIAGEDATE = RESULT
'GETMARRYPLACE' PARENTS
PARENTSmFGRNPLACE = RESULT
'GETFAMUSER1' PARENTS
PARENTSmFGRNCELEBRANT = CheckForReplacement(RESULT)
PARENTSnmFGRNCELEBRANT = CheckForNAReplacement(RESULT)
'GETFAMUSER2' PARENTS
PARENTSmFGRNCOMMENT = CheckForReplacement(RESULT)
PARENTSnmFGRNCOMMENT = CheckForNAReplacement(RESULT)
'GETSEX' PRINCIPAL
IF RESULT = 'M' THEN
DO
FATHERScionIRN = PRINCIPAL
MOTHERScionIRN = SPOUSE
END
ELSE
DO
FATHERScionIRN = SPOUSE
MOTHERScionIRN = PRINCIPAL
END
'GETLASTNAME' FATHERScionIRN
FATHERLASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' FATHERScionIRN
FATHERFIRSTNAME = RESULT
IF FATHERFIRSTNAME ~= "" | FATHERLASTNAME ~= "" THEN HasFATHER = 1
thelastname = FATHERLASTNAME
thegender = "m"
FATHERFULLNAME = GetFullName(FATHERFIRSTNAME)
MFATHERFULLNAME = MGetFullName(FATHERFIRSTNAME)
PFATHERFULLNAME = PGetFullName(FATHERFIRSTNAME)
'GETBIRTHDATE' FATHERScionIRN
FATHERBIRTHDATE = RESULT
'GETLASTNAME' MOTHERScionIRN
MOTHERLASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' MOTHERScionIRN
MOTHERFIRSTNAME = RESULT
IF MOTHERFIRSTNAME ~= "" | MOTHERLASTNAME ~= "" THEN HasMOTHER = 1
thelastname = MOTHERLASTNAME
thegender = "f"
MOTHERFULLNAME = GetFullName(MOTHERFIRSTNAME)
MMOTHERFULLNAME = MGetFullName(MOTHERFIRSTNAME)
PMOTHERFULLNAME = PGetFullName(MOTHERFIRSTNAME)
'GETBIRTHDATE' MOTHERScionIRN
MOTHERBIRTHDATE = RESULT
/**/
IF FATHERLASTNAME ~= "" THEN DO
HasFileFATHER = 1
IF FATHERBIRTHDATE = "" THEN DO
FATHERFILENAME = Space(substr(FATHERFIRSTNAME,1,2) substr(FATHERLASTNAME,1,6) FATHERScionIRN)
END
ELSE DO
FATHERFILENAME = Space(substr(FATHERFIRSTNAME,1,2) substr(FATHERLASTNAME,1,4) FATHERBIRTHDATE)
END
END
/**/
IF MOTHERLASTNAME ~= "" THEN DO
HasFileMOTHER = 1
IF MOTHERBIRTHDATE = "" THEN DO
MOTHERFILENAME = Space(substr(MOTHERFIRSTNAME,1,2) substr(MOTHERLASTNAME,1,6) MOTHERScionIRN)
END
ELSE DO
MOTHERFILENAME = Space(substr(MOTHERFIRSTNAME,1,2) substr(MOTHERLASTNAME,1,4) MOTHERBIRTHDATE)
END
END
/**/
WriteCh('PERSONFILE',' ')
IF HasFileFATHER THEN WriteCh('PERSONFILE','<A HREF="'FATHERFILENAME'.html">')
WriteCh('PERSONFILE',MFATHERFULLNAME)
IF HasFileFATHER THEN WriteCh('PERSONFILE','</A> //\ ')
IF HasFileMOTHER THEN WriteCh('PERSONFILE','<A HREF="'MOTHERFILENAME'.html">')
WriteCh('PERSONFILE',MMOTHERFULLNAME)
IF HasFileMOTHER THEN WriteCh('PERSONFILE','</A>')
/**/
IF PARENTSMARRIAGEDATE ~= "" THEN
WriteCh('PERSONFILE',' & 'PARENTSMARRIAGEDATE)
IF PARENTSmFGRNPLACE ~= "" THEN
WriteCh('PERSONFILE',' @ 'PARENTSmFGRNPLACE)
/**/
WriteLn('PERSONFILE','')
IF DoGenText THEN DO
WriteCh('GenealogyText',' 'PFATHERFULLNAME' //\ 'PMOTHERFULLNAME)
IF PARENTSMARRIAGEDATE ~= "" THEN WriteCh('GenealogyText',' & 'PARENTSMARRIAGEDATE)
IF PARENTSmFGRNPLACE ~= "" THEN WriteCh('GenealogyText',' @ 'PARENTSmFGRNPLACE)
WriteLn('GenealogyText','')
END
spcs = ' |'
DO i = 0 TO Length(FATHERFULLNAME)
spcs = spcs' ' /* ??? GETFAMLBL1 ??? */
END /* ??? GETFAMLBL2 ??? */
/**/
FfilN = Gdir'/Family'PARENTS
IF Exists(FfilN'I.html') THEN DO
IF Exists('Genealogy:FN'PARENTS'.'DBNAME) THEN DO
Parse value StateF(FfilN'I.html') with type size blk bits PFday PFmin PFtick com
Parse value StateF('Genealogy:FN'PARENTS'.'DBNAME) with type size blk bits PNday PNmin PNtick com
/* Say PERSONFILENAME'I.html' PFday PFmin PFtick 'Genealogy:FN'PARENTS'.'DBNAME PNday PNmin PNtick */
IF ( PNday > PFday ) | ( PNday = PFday & PNmin > PFmin ) THEN DO
Delete(FfilN'I.html')
Say 'Scion file Genealogy:FN'PARENTS'.'DBNAME 'newer; replacing 'FfilN'I.html'
END
END
END
/**/
Minfo = 0
IF Exists(FfilN'I.html') THEN
Minfo = 1
/* WriteCh('PERSONFILE',' (<A HREF="'PERSONFILENAME'I.html"><B>more info</B></A>)') */
ELSE DO
IF Exists('Genealogy:FN'PARENTS'.'DBNAME) THEN DO
Minfo = 1
Say 'Writing info file 'FfilN'I.html'
Open('FNDBNAME','Genealogy:FN'PARENTS'.'DBNAME,'r')
Open('FAMILYI',FfilN'I.html','w')
WriteLn('FAMILYI','<HTML>')
WriteLn('FAMILYI','<TITLE>'FATHERFULLNAME' Family Information</TITLE>')
WriteCh('FAMILYI','<H2><A HREF="GenealogyFile.html">')
WriteLn('FAMILYI','<B>List of Persons.</B></A></H2><PRE><TT>')
DO While ~EOF('FNDBNAME')
line = ReadLn('FNDBNAME')
WriteLn('FAMILYI',line)
END
Close('FNDBNAME')
WriteLn('FAMILYI','</HTML>')
Close('FAMILYI')
/* WriteCh('PERSONFILE',' (<A HREF="'PERSONFILENAME'I.html"><B>more info</B></A>)') */
END
END
/**/
IF PARENTSmFGRNCELEBRANT ~= '' | Minfo THEN DO
WriteCh('PERSONFILE',spcs)
IF Minfo THEN
WriteCh('PERSONFILE','(<A HREF="Family'PARENTS'I.html"><B>family info</B></A>) ')
IF PARENTSmFGRNCELEBRANT ~= '' THEN DO
WriteCh('PERSONFILE',FAMLABEL1': 'PARENTSmFGRNCELEBRANT)
IF DoGenText THEN WriteLn('GenealogyText',spcs||FAMLABEL1': 'PARENTSnmFGRNCELEBRANT)
END
WriteLn('PERSONFILE','')
END
IF PARENTSmFGRNCOMMENT ~= '' THEN DO
WriteLn('PERSONFILE',spcs' 'FAMLABEL2': 'PARENTSmFGRNCOMMENT)
IF DoGenText THEN WriteLn('GenealogyText',spcs' 'FAMLABEL2': 'PARENTSnmFGRNCOMMENT)
END
DO i = 0 TO 39 /* ??? GETTOTCHILDREN FGRN ??? */
'GETCHILD' PARENTS i
PARENTSc = RESULT
'GETFIRSTNAME' PARENTSc
PARENTScFIRSTNAME = RESULT
/**/
IF PARENTScFIRSTNAME ~= "" THEN DO
IF PARENTSc ~= ScionIRN THEN DO
'GETLASTNAME' PARENTSc
PARENTScLASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' PARENTSc
PARENTScFIRSTNAME = RESULT
'GETSEX' PARENTSc
PARENTScGENDER = translate(RESULT,xrange('a','z'),xrange('A','Z'))
thelastname = PARENTScLASTNAME
thegender = PARENTScGENDER
PARENTScFULLNAME = GetFullName(PARENTScFIRSTNAME)
MPARENTScFULLNAME = MGetFullName(PARENTScFIRSTNAME)
PPARENTScFULLNAME = PGetFullName(PARENTScFIRSTNAME)
'GETBIRTHDATE' PARENTSc
PARENTScBIRTHDATE = RESULT
'GETDEATHDATE' PARENTSc
PARENTScDEATHDATE = RESULT
/**/
IF PARENTScBIRTHDATE = "" THEN
PARENTScFILENAME = Space(substr(PARENTScFIRSTNAME,1,2) substr(PARENTScLASTNAME,1,6) PARENTSc)
ELSE
PARENTScFILENAME = Space(substr(PARENTScFIRSTNAME,1,2) substr(PARENTScLASTNAME,1,4) PARENTScBIRTHDATE)
/**/
WriteCh('PERSONFILE',' |_____ <A HREF="'PARENTScFILENAME'.html">')
/**/
IF PARENTScLASTNAME ~= FATHERLASTNAME THEN
WriteCh('PERSONFILE',MPARENTScFULLNAME)
ELSE DO
IF PARENTScGENDER = "m" THEN WriteCh('PERSONFILE','<B>'PARENTScFIRSTNAME'</B>')
IF PARENTScGENDER = "f" THEN WriteCh('PERSONFILE','<I>'PARENTScFIRSTNAME'</I>')
END
/**/
WriteCh('PERSONFILE','</A> ')
/**/
IF PARENTScBIRTHDATE ~= "" THEN
WriteCh('PERSONFILE',' * 'PARENTScBIRTHDATE)
/**/
IF PARENTScDEATHDATE ~= "" THEN
WriteCh('PERSONFILE',' + 'PARENTScDEATHDATE)
/**/
WriteLn('PERSONFILE','')
IF DoGenText THEN DO
WriteCh('GenealogyText',' |_____ 'PPARENTScFULLNAME)
IF PARENTScBIRTHDATE ~= "" THEN WriteCh('GenealogyText',' * 'PARENTScBIRTHDATE)
IF PARENTScDEATHDATE ~= "" THEN WriteCh('GenealogyText',' + 'PARENTScDEATHDATE)
WriteLn('GenealogyText','')
END
END
END
END
END
END
/* end of parents, siblings segment; start marriages segment */
vert.0 = ''
vert.1 = ' |'
DO i = 0 TO 39 /* ??? GETTOTMARRIAGES IRN ??? */
'GETMARRIAGE' ScionIRN i
MARRIAGE = RESULT /* use: 'EXISTFAMILY' */
IF MARRIAGE > -1 THEN DO
MARRIAGES = i
j = i + 1
vert.j = vert.i vert.1
END
END
tMARRIAGESt = 't'MARRIAGES't'
/* Say 'MARRIAGES = 'MARRIAGES tMARRIAGESt */
IF tMARRIAGESt ~= 'tMARRIAGESt' THEN DO
WriteLn('PERSONFILE',' |')
IF DoGenText THEN WriteLn('GenealogyText',' |')
DO i = 0 TO MARRIAGES
'GETMARRIAGE' ScionIRN i
mFGRN = RESULT
IF mFGRN ~= "" THEN DO
ki = MARRIAGES - i + 1
IF ki ~= MARRIAGES + 1 THEN DO
WriteLn('PERSONFILE',vert.ki)
IF DoGenText THEN WriteLn('GenealogyText',vert.ki)
END
j = MARRIAGES + 1 - i
'GETSPOUSE' mFGRN
SPOUSE = RESULT
IF SPOUSE = ScionIRN THEN
DO
'GETPRINCIPAL' mFGRN
SPOUSE = RESULT
END
'GETLASTNAME' SPOUSE
SPOUSELASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' SPOUSE
SPOUSEFIRSTNAME = RESULT
thelastname = SPOUSELASTNAME
'GETSEX' SPOUSE
thegender = translate(RESULT,xrange('a','z'),xrange('A','Z'))
SPOUSEFULLNAME = GetFullName(SPOUSEFIRSTNAME)
MSPOUSEFULLNAME = MGetFullName(SPOUSEFIRSTNAME)
PSPOUSEFULLNAME = PGetFullName(SPOUSEFIRSTNAME)
'GETBIRTHDATE' SPOUSE
SPOUSEBIRTHDATE = RESULT
'GETMARRYDATE' mFGRN
MARRIAGEDATE = RESULT
'GETMARRYPLACE' mFGRN
mFGRNPLACE = RESULT
'GETFAMUSER1' mFGRN
MARRIAGECELEBRANT = CheckForReplacement(RESULT)
MARRIAGEnCELEBRANT = CheckForNAReplacement(RESULT)
'GETFAMUSER2' mFGRN
MARRIAGECOMMENT = CheckForReplacement(RESULT)
MARRIAGEnCOMMENT = CheckForNAReplacement(RESULT)
/**/
IF SPOUSEBIRTHDATE = "" THEN
SPOUSEFILENAME = Space(substr(SPOUSEFIRSTNAME,1,2) substr(SPOUSELASTNAME,1,6) SPOUSE)
ELSE
SPOUSEFILENAME = Space(substr(SPOUSEFIRSTNAME,1,2) substr(SPOUSELASTNAME,1,4) SPOUSEBIRTHDATE)
/**/
IF i = 0 THEN DO
WriteCh('PERSONFILE',' 'MFULLNAME' //\ ')
IF SPOUSELASTNAME ~= "" THEN
WriteCh('PERSONFILE','<A HREF="'SPOUSEFILENAME'.html">')
WriteCh('PERSONFILE',MSPOUSEFULLNAME)
IF SPOUSELASTNAME ~= "" THEN
WriteCh('PERSONFILE','</A>')
IF DoGenText THEN DO
WriteCh('GenealogyText',' 'PFULLNAME' //\ 'PSPOUSEFULLNAME)
IF MARRIAGEDATE ~= "" THEN WriteCh('GenealogyText',' & 'MARRIAGEDATE)
IF mFGRNPLACE ~= "" THEN WriteCh('GenealogyText',' @ 'mFGRNPLACE)
WriteLn('GenealogyText','')
END
END
ELSE DO
WriteCh('PERSONFILE',vert.j'_ //\ ')
IF SPOUSELASTNAME ~= "" THEN
WriteCh('PERSONFILE','<A HREF="'SPOUSEFILENAME'.html">')
WriteCh('PERSONFILE',MSPOUSEFULLNAME)
IF SPOUSELASTNAME ~= "" THEN
WriteCh('PERSONFILE','</A>')
IF DoGenText THEN DO
WriteCh('GenealogyText',vert.j'_ //\ 'PSPOUSEFULLNAME)
IF MARRIAGEDATE ~= "" THEN WriteCh('GenealogyText',' & 'MARRIAGEDATE)
IF mFGRNPLACE ~= "" THEN WriteCh('GenealogyText',' @ 'mFGRNPLACE)
WriteLn('GenealogyText','')
END
END
IF MARRIAGEDATE ~= "" THEN
WriteCh('PERSONFILE',' & 'MARRIAGEDATE)
IF mFGRNPLACE ~= "" THEN
WriteCh('PERSONFILE',' @ 'mFGRNPLACE)
WriteLn('PERSONFILE','')
jk = MARRIAGES - i
spcs = vert.jk' | '
/**/
FfilN = Gdir'/Family'mFGRN
Minfo = 0
IF Exists('Genealogy:FN'mFGRN'.'DBNAME) THEN DO
Minfo = 1
Say 'Writing info file 'FfilN'I.html'
Open('FNDBNAME','Genealogy:FN'mFGRN'.'DBNAME,'r')
Open('FAMILYI',FfilN'I.html','w')
WriteLn('FAMILYI','<HTML>')
WriteLn('FAMILYI','<TITLE>'FULLNAME' Family Information</TITLE>')
WriteCh('FAMILYI','<H2>Family of 'MFULLNAME' and 'MSPOUSEFULLNAME)
WriteCh('FAMILYI',' <A HREF="GenealogyFile.html">')
WriteLn('FAMILYI','<B>List of Persons.</B></A></H2><PRE><TT>')
DO While ~EOF('FNDBNAME')
line = ReadLn('FNDBNAME')
WriteLn('FAMILYI',CheckForReplacement(line))
IF DoGenText THEN WriteLn('GenealogyText',spcs' 'CheckForNAReplacement(line))
END
Close('FNDBNAME')
WriteLn('FAMILYI','</HTML>')
Close('FAMILYI')
END
/**/
IF MARRIAGECELEBRANT ~= '' | Minfo THEN DO
WriteCh('PERSONFILE',spcs)
IF Minfo THEN
WriteCh('PERSONFILE','(<A HREF="Family'mFGRN'I.html"><B>family info</B></A>) ')
IF MARRIAGECELEBRANT ~= '' THEN DO
WriteCh('PERSONFILE',FAMLABEL1': 'MARRIAGECELEBRANT)
IF DoGenText THEN WriteLn('GenealogyText',spcs||FAMLABEL1': 'MARRIAGEnCELEBRANT)
END
WriteLn('PERSONFILE','')
END
IF MARRIAGECOMMENT ~= '' THEN DO
WriteLn('PERSONFILE',spcs' 'FAMLABEL2': 'MARRIAGECOMMENT)
IF DoGenText THEN WriteLn('GenealogyText',spcs' 'FAMLABEL2': 'MARRIAGEnCOMMENT)
END
/*********************************************************************************/
DO k = 0 TO 39 /* ??? GETTOTCHILDREN FGRN ??? */
'GETCHILD' mFGRN k
mFGRNc = RESULT
'GETFIRSTNAME' mFGRNc
mFGRNcFIRSTNAME = RESULT
/**/
IF mFGRNcFIRSTNAME ~= "" THEN DO
HasCHILDREN = 1
'GETLASTNAME' mFGRNc
mFGRNcLASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' mFGRNc
mFGRNcFIRSTNAME = RESULT
'GETSEX' mFGRNc
mFGRNcGENDER = translate(RESULT,xrange('a','z'),xrange('A','Z'))
thelastname = mFGRNcLASTNAME
thegender = mFGRNcGENDER
mFGRNcFULLNAME = GetFullName(mFGRNcFIRSTNAME)
MmFGRNcFULLNAME = MGetFullName(mFGRNcFIRSTNAME)
PmFGRNcFULLNAME = PGetFullName(mFGRNcFIRSTNAME)
'GETBIRTHDATE' mFGRNc
mFGRNcBIRTHDATE = RESULT
'GETDEATHDATE' mFGRNc
mFGRNcDEATHDATE = RESULT
/**/
IF mFGRNcBIRTHDATE = "" THEN
mFGRNcFILENAME = Space(substr(mFGRNcFIRSTNAME,1,2) substr(mFGRNcLASTNAME,1,6) mFGRNc)
ELSE
mFGRNcFILENAME = Space(substr(mFGRNcFIRSTNAME,1,2) substr(mFGRNcLASTNAME,1,4) mFGRNcBIRTHDATE)
jk = MARRIAGES - i
WriteCh('PERSONFILE',vert.jk' |_____ <A HREF="'mFGRNcFILENAME'.html">')
/**/
IF mFGRNcLASTNAME ~= LASTNAME THEN
WriteCh('PERSONFILE',MmFGRNcFULLNAME)
ELSE DO
IF mFGRNcGENDER = "m" THEN WriteCh('PERSONFILE','<B>'mFGRNcFIRSTNAME'</B>')
IF mFGRNcGENDER = "f" THEN WriteCh('PERSONFILE','<I>'mFGRNcFIRSTNAME'</I>')
END
WriteCh('PERSONFILE','</A> ')
/**/
IF mFGRNcBIRTHDATE ~= "" THEN
WriteCh('PERSONFILE',' * 'mFGRNcBIRTHDATE)
/**/
IF mFGRNcDEATHDATE ~= "" THEN
WriteCh('PERSONFILE',' + 'mFGRNcDEATHDATE)
Writeln('PERSONFILE','')
IF DoGenText THEN DO
WriteCh('GenealogyText',vert.jk' |_____ 'PmFGRNcFULLNAME)
IF mFGRNcBIRTHDATE ~= "" THEN WriteCh('GenealogyText',' * 'mFGRNcBIRTHDATE)
IF mFGRNcDEATHDATE ~= "" THEN WriteCh('GenealogyText',' + 'mFGRNcDEATHDATE)
WriteLn('GenealogyText','')
END
END
END
END
/*********************************************************************************/
END
END
ELSE DO
WriteLn('PERSONFILE',' |')
IF DoGenText THEN WriteLn('GenealogyText',' |')
WriteLn('PERSONFILE',' 'MFULLNAME)
IF DoGenText THEN WriteLn('GenealogyText',' 'PFULLNAME)
END
WriteLn('PERSONFILE','</TT></PRE>')
IF HasPARENTS THEN DO
WriteLn('PERSONFILE','<HR>')
IF DoGenText THEN DO
WriteLn('GenealogyText','')
WriteLn('GenealogyText','-----------------------------------------------------------')
WriteLn('GenealogyText','')
END
WriteCh('PERSONFILE','<H3>Ancestors of ')
WriteCh('PERSONFILE','<B>'MFULLNAME)
WriteLn('PERSONFILE','</H3>')
IF DoGenText THEN WriteLn('GenealogyText',' Ancestors of 'PFULLNAME)
IF DoGenText THEN WriteLn('GenealogyText','')
WriteLn('PERSONFILE','<PRE><TT>')
Paternal(ScionIRN,' ')
WriteCh('PERSONFILE','<H2>'MFULLNAME)
IF BIRTHDATE ~= "" THEN WriteCh('PERSONFILE',' * 'BIRTHDATE)
IF DEATHDATE ~= "" THEN WriteCh('PERSONFILE',' + 'DEATHDATE)
WriteLn('PERSONFILE','</H2>')
IF DoGenText THEN DO
WriteCh('GenealogyText',PFULLNAME)
IF BIRTHDATE ~= "" THEN WriteCh('GenealogyText',' * 'BIRTHDATE)
IF DEATHDATE ~= "" THEN WriteCh('GenealogyText',' + 'DEATHDATE)
WriteLn('GenealogyText','')
END
Maternal(ScionIRN,' ')
WriteLn('PERSONFILE','</TT></PRE>')
END
/* ELSE */
IF HasCHILDREN THEN DO
WriteLn('PERSONFILE','<HR>')
IF DoGenText THEN DO
WriteLn('GenealogyText','')
WriteLn('GenealogyText','-----------------------------------------------------------')
WriteLn('GenealogyText','')
WriteLn('GenealogyText',' Descendants of 'PFULLNAME)
WriteLn('GenealogyText','')
END
WriteLn('PERSONFILE','<H3>Descendants of 'MFULLNAME'</H3>')
indent = " "
WriteLn('PERSONFILE','<PRE><TT>')
WriteCh('PERSONFILE',indent||MFULLNAME)
IF BIRTHDATE ~= "" THEN WriteCh('PERSONFILE',' * 'BIRTHDATE)
IF DEATHDATE ~= "" THEN WriteCh('PERSONFILE',' + 'DEATHDATE)
WriteLn('PERSONFILE','<BR>')
IF DoGenText THEN DO
WriteCh('GenealogyText',indent || PFULLNAME)
IF BIRTHDATE ~= "" THEN WriteCh('GenealogyText',' * 'BIRTHDATE)
IF DEATHDATE ~= "" THEN WriteCh('GenealogyText',' + 'DEATHDATE)
WriteLn('GenealogyText','')
END
marriagesANDchildren(ScionIRN,indent)
WriteLn('PERSONFILE','</TT></PRE>')
END
/* WriteLn('PERSONFILE','<HR>')
WriteLn('PERSONFILE','<Address>')
'GETPROGVERSION'
VERSION = RESULT
WriteCh('PERSONFILE','<H3>ScionGenealogist')
IF VERSION > 0 THEN WriteCh('PERSONFILE',' V 'VERSION)
WriteLn('PERSONFILE',' © Robbie J Akins; ')
WriteLn('PERSONFILE','ScionToMosaic.rexx © Harold H. Ipolyi</H3>')
WriteLn('PERSONFILE','</Address>') */
WriteLn('PERSONFILE','</HTML>')
Close('PERSONFILE')
IF DoGenText THEN WriteLn('GenealogyText','')
IF target = "NORMAL" & LASTNAME ~= "" THEN DO
WriteCh('GenealogyFile','<A HREF="'PERSONFILENAME'.html">')
WriteCh('GenealogyFile',MFULLNAME)
WriteCh('GenealogyFile','</A>')
IF BIRTHDATE ~= "" THEN WriteCh('GenealogyFile',' *'BIRTHDATE)
IF DEATHDATE ~= "" THEN WriteCh('GenealogyFile',' +'DEATHDATE)
/*********************************************************************************/
IF HasFATHER THEN DO
WriteCh('GenealogyFile',' (()) ')
IF HasFileFATHER THEN WriteCh('GenealogyFile','<A HREF="'FATHERFILENAME'.html">')
WriteCh('GenealogyFile',' 'MFATHERFULLNAME)
IF HasFileFATHER THEN WriteCh('GenealogyFile','</A>')
IF HasMOTHER THEN DO
IF HasFATHER THEN WriteCh('GenealogyFile',' //\ ')
IF HasFileMOTHER THEN WriteCh('GenealogyFile','<A HREF="'MOTHERFILENAME'.html">')
WriteCh('GenealogyFile',MMOTHERFULLNAME)
IF HasFileMOTHER THEN WriteCh('GenealogyFile','</A>')
END
END
/*********************************************************************************/
WriteLn('GenealogyFile','<BR>') /* do not close, we have many more to go. */
END
RETURN
IsNumeric: PROCEDURE
PARSE ARG str
RETURN DataType(str, 'W')
/* create a file name short but unique */
FilName: PROCEDURE
PARSE ARG finm lanm bdate
RETURN Space(substr(finm,1,2) substr(lanm,1,4) bdate)
/******************************** Makedir **********************************/
/* Makedir - If a directory under the given name already exists, or can be
created, return 1, otherwise return 0. Though this function works
correctly under Workbench 1.3, it has the same effect as the existing
MAKEDIR; hence it is useful only under 2.0.
*/
Makedir: procedure
ds = statef(arg(1))
if ds='' then
result = 'MAKEDIR'(arg(1))
else
result = left(ds,3) = 'DIR'
return result
CheckForReplacement: PROCEDURE
PARSE ARG line "<" last
IF last = "" THEN RETURN CheckReplacement(line)
RIRN = GetRIRN(last || ".")
IF RIRN = 0 THEN RETURN line || "<" || last
last = CheckForReplacement(last) /* recursion */
lastend = GetEnd(last || ".")
'GETLASTNAME' RIRN
RIRNLASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' RIRN
RIRNFIRSTNAME = RESULT
thelastname = RIRNLASTNAME
'GETBIRTHDATE' RIRN
RIRNBIRTHDATE = RESULT
'GETSEX' RIRN
IF translate(RESULT,xrange('a','z'),xrange('A','Z')) = "m" THEN
RIRNFULLNAME = '<B>' || GetFullName(RIRNFIRSTNAME) || '</B>'
ELSE
RIRNFULLNAME = '<I>' || GetFullName(RIRNFIRSTNAME) || '</I>'
IF RIRNLASTNAME = "" THEN
RETURN line || RIRNFULLNAME || lastend
IF RIRNBIRTHDATE = "" THEN
RIRNFILENAME = Space(substr(RIRNFIRSTNAME,1,2) substr(RIRNLASTNAME,1,6) RIRN)
ELSE
RIRNFILENAME = Space(substr(RIRNFIRSTNAME,1,2) substr(RIRNLASTNAME,1,4) RIRNBIRTHDATE)
RETURN line || '<A HREF="'RIRNFILENAME'.html">'RIRNFULLNAME'</A>' || lastend
CheckReplacement: PROCEDURE
PARSE ARG line "[" last
IF last = "" THEN RETURN line
RIRN = GetaRIRN(last || ".")
IF RIRN = 0 THEN RETURN line || "[" || last
last = CheckForReplacement(last) /* recursion */
lastend = GetaEnd(last || ".")
'GETLASTNAME' RIRN
RIRNLASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' RIRN
RIRNFIRSTNAME = RESULT
thelastname = RIRNLASTNAME
'GETBIRTHDATE' RIRN
RIRNBIRTHDATE = RESULT
'GETSEX' RIRN
IF translate(RESULT,xrange('a','z'),xrange('A','Z')) = "m" THEN
RIRNFULLNAME = '<B>' || GetFullName(RIRNFIRSTNAME) || '</B>'
ELSE
RIRNFULLNAME = '<I>' || GetFullName(RIRNFIRSTNAME) || '</I>'
IF RIRNLASTNAME = "" THEN
RETURN line || RIRNFULLNAME || lastend
IF RIRNBIRTHDATE = "" THEN
RIRNFILENAME = Space(substr(RIRNFIRSTNAME,1,2) substr(RIRNLASTNAME,1,6) RIRN)
ELSE
RIRNFILENAME = Space(substr(RIRNFIRSTNAME,1,2) substr(RIRNLASTNAME,1,4) RIRNBIRTHDATE)
RETURN line || '<A HREF="'RIRNFILENAME'.html">'RIRNFULLNAME'</A>' || lastend
CheckForNAReplacement: PROCEDURE
PARSE ARG line "<" last
IF last = "" THEN RETURN CheckNAReplacement(line)
RIRN = GetRIRN(last || ".")
IF RIRN = 0 THEN RETURN line || "<" || last
last = CheckForNAReplacement(last) /* recursion */
lastend = GetEnd(last || ".")
'GETLASTNAME' RIRN
RIRNLASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' RIRN
RIRNFIRSTNAME = RESULT
thelastname = RIRNLASTNAME
'GETBIRTHDATE' RIRN
RIRNBIRTHDATE = RESULT
'GETSEX' RIRN
GENDER = translate(RESULT,xrange('a','z'),xrange('A','Z'))
thelastname = GetFullName(RIRNLASTNAME)
thegender = GENDER
IF thegender = "m" THEN
RIRNFULLNAME = '
' || GetFullName(RIRNFIRSTNAME) || '
'
ELSE
RIRNFULLNAME = '
' || GetFullName(RIRNFIRSTNAME) || '
'
RETURN line || RIRNFULLNAME lastend
CheckNAReplacement: PROCEDURE
PARSE ARG line "[" last
IF last = "" THEN RETURN line
RIRN = GetaRIRN(last || ".")
IF RIRN = 0 THEN RETURN line || "[" || last
last = CheckForNAReplacement(last) /* recursion */
lastend = GetaEnd(last || ".")
'GETLASTNAME' RIRN
RIRNLASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' RIRN
RIRNFIRSTNAME = RESULT
thelastname = RIRNLASTNAME
'GETBIRTHDATE' RIRN
RIRNBIRTHDATE = RESULT
'GETSEX' RIRN
GENDER = translate(RESULT,xrange('a','z'),xrange('A','Z'))
thelastname = GetFullName(RIRNLASTNAME)
thegender = GENDER
IF thegender = "m" THEN
RIRNFULLNAME = '
' || GetFullName(RIRNFIRSTNAME) || '
'
ELSE
RIRNFULLNAME = '
' || GetFullName(RIRNFIRSTNAME) || '
'
RETURN line || RIRNFULLNAME lastend
Paternal: PROCEDURE EXPOSE DoGenText
PARSE ARG irn, indent
'GETPARENTS' irn
PARENTS = RESULT
'GETPRINCIPAL' PARENTS
PRINCIPAL = RESULT
'GETSPOUSE' PARENTS
SPOUSE = RESULT
'GETSEX' PRINCIPAL
IF RESULT = 'M' THEN DO
FIRN = PRINCIPAL
MIRN = SPOUSE
END
ELSE DO
FIRN = SPOUSE
MIRN = PRINCIPAL
END
pirn = FIRN
IF 't'pirn't' ~= 'tt' THEN DO
Paternal(pirn,' 'indent)
'GETLASTNAME' pirn
pirnLASTNAME = GetLastName(RESULT)
thelastname = pirnLASTNAME
'GETFIRSTNAME' pirn
pirnFIRSTNAME = RESULT
pirnFULLNAME = GetFullName(pirnFIRSTNAME)
'GETBIRTHDATE' pirn
pirnBIRTHDATE = RESULT
IF pirnLASTNAME ~= "" THEN DO
IF pirnBIRTHDATE = "" THEN
pirnPERSONFILENAME = Space(substr(pirnFIRSTNAME,1,2) substr(pirnLASTNAME,1,6) pirn)
ELSE
pirnPERSONFILENAME = Space(substr(pirnFIRSTNAME,1,2) substr(pirnLASTNAME,1,4) pirnBIRTHDATE)
END
WriteCh('PERSONFILE',indent'- ')
IF pirnLASTNAME ~= "" THEN WriteCh('PERSONFILE','<A HREF="'pirnPERSONFILENAME'.html">')
WriteCh('PERSONFILE','<B>'pirnFULLNAME)
IF pirnLASTNAME ~= "" THEN WriteCh('PERSONFILE','</A>')
IF pirnBIRTHDATE ~= "" THEN WriteCh('PERSONFILE',' * 'pirnBIRTHDATE)
'GETDEATHDATE' pirn
pirnDEATHDATE = RESULT
IF pirnDEATHDATE ~= "" THEN WriteCh('PERSONFILE',' + 'pirnDEATHDATE)
WriteLn('PERSONFILE','</B>')
IF DoGenText THEN DO
WriteCh('GenealogyText',indent'-
'pirnFULLNAME)
IF pirnBIRTHDATE ~= "" THEN WriteCh('GenealogyText',' * 'pirnBIRTHDATE)
IF pirnDEATHDATE ~= "" THEN WriteCh('GenealogyText',' + 'pirnDEATHDATE)
WriteLn('GenealogyText','
')
END
Maternal(pirn,' 'indent)
END
RETURN 0
Maternal: PROCEDURE EXPOSE DoGenText
PARSE ARG irn, indent
'GETPARENTS' irn
PARENTS = RESULT
'GETPRINCIPAL' PARENTS
PRINCIPAL = RESULT
'GETSPOUSE' PARENTS
SPOUSE = RESULT
'GETSEX' PRINCIPAL
IF RESULT = 'M' THEN DO
FIRN = PRINCIPAL
MIRN = SPOUSE
END
ELSE DO
FIRN = SPOUSE
MIRN = PRINCIPAL
END
pirn = MIRN
IF 't'pirn't' ~= 'tt' THEN DO
Paternal(pirn,' 'indent)
'GETLASTNAME' pirn
pirnLASTNAME = GetLastName(RESULT)
thelastname = pirnLASTNAME
'GETFIRSTNAME' pirn
pirnFIRSTNAME = RESULT
pirnFULLNAME = GetFullName(pirnFIRSTNAME)
'GETBIRTHDATE' pirn
pirnBIRTHDATE = RESULT
IF pirnLASTNAME ~= "" THEN DO
IF pirnBIRTHDATE = "" THEN
pirnPERSONFILENAME = Space(substr(pirnFIRSTNAME,1,2) substr(pirnLASTNAME,1,6) pirn)
ELSE
pirnPERSONFILENAME = Space(substr(pirnFIRSTNAME,1,2) substr(pirnLASTNAME,1,4) pirnBIRTHDATE)
END
WriteCh('PERSONFILE',indent'- ')
IF pirnLASTNAME ~= "" THEN WriteCh('PERSONFILE','<A HREF="'pirnPERSONFILENAME'.html">')
WriteCh('PERSONFILE','<I>'pirnFULLNAME)
IF pirnLASTNAME ~= "" THEN WriteCh('PERSONFILE','</A>')
IF pirnBIRTHDATE ~= "" THEN WriteCh('PERSONFILE',' * 'pirnBIRTHDATE)
'GETDEATHDATE' pirn
pirnDEATHDATE = RESULT
IF pirnDEATHDATE ~= "" THEN WriteCh('PERSONFILE',' + 'pirnDEATHDATE)
WriteLn('PERSONFILE','</I>')
IF DoGenText THEN DO
WriteCh('GenealogyText',indent'-
'pirnFULLNAME)
IF pirnBIRTHDATE ~= "" THEN WriteCh('GenealogyText',' * 'pirnBIRTHDATE)
IF pirnDEATHDATE ~= "" THEN WriteCh('GenealogyText',' + 'pirnDEATHDATE)
WriteLn('GenealogyText','')
END
Maternal(pirn,' 'indent)
END
RETURN 0
marriagesANDchildren: PROCEDURE EXPOSE DoGenText
PARSE ARG ScionIRN,indent
DO i = 0 TO 39 /* ??? GETTOTMARRIAGES IRN ??? */
'GETMARRIAGE' ScionIRN i
MARRIAGE = RESULT
IF MARRIAGE > -1 THEN DO
MARRIAGES = i
END
END
tMARRIAGESt = 't'MARRIAGES't'
/* Say 'MARRIAGES = 'MARRIAGES tMARRIAGESt */
IF tMARRIAGESt ~= 'tMARRIAGESt' THEN DO
DO i = 0 TO MARRIAGES
'GETMARRIAGE' ScionIRN i
mFGRN = RESULT
IF mFGRN ~= "" THEN DO
'GETSPOUSE' mFGRN
SPOUSE = RESULT
IF SPOUSE = ScionIRN THEN
DO
'GETPRINCIPAL' mFGRN
SPOUSE = RESULT
END
'GETLASTNAME' SPOUSE
SPOUSELASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' SPOUSE
SPOUSEFIRSTNAME = RESULT
thelastname = SPOUSELASTNAME
'GETSEX' SPOUSE
thegender = translate(RESULT,xrange('a','z'),xrange('A','Z'))
SPOUSEFULLNAME = GetFullName(SPOUSEFIRSTNAME)
MSPOUSEFULLNAME = MGetFullName(SPOUSEFIRSTNAME)
PSPOUSEFULLNAME = PGetFullName(SPOUSEFIRSTNAME)
'GETBIRTHDATE' SPOUSE
SPOUSEBIRTHDATE = RESULT
'GETDEATHDATE' SPOUSE
SPOUSEDEATHDATE = RESULT
IF SPOUSEBIRTHDATE = "" THEN
SPOUSEFILENAME = Space(substr(SPOUSEFIRSTNAME,1,2) substr(SPOUSELASTNAME,1,6) SPOUSE)
ELSE
SPOUSEFILENAME = Space(substr(SPOUSEFIRSTNAME,1,2) substr(SPOUSELASTNAME,1,4) SPOUSEBIRTHDATE)
WriteCH('PERSONFILE',indent'spouse: ')
IF SPOUSELASTNAME ~= "" THEN
WriteCh('PERSONFILE','<A HREF="'SPOUSEFILENAME'.html">')
WriteCh('PERSONFILE',MSPOUSEFULLNAME)
IF SPOUSELASTNAME ~= "" THEN
WriteCh('PERSONFILE','</A>')
IF SPOUSEBIRTHDATE ~= "" THEN
WriteCh('PERSONFILE',' * 'SPOUSEBIRTHDATE)
IF SPOUSEDEATHDATE ~= "" THEN
WriteCh('PERSONFILE',' * 'SPOUSEDEATHDATE)
IF DoGenText THEN DO
WriteCh('GenealogyText',indent'spouse: 'PSPOUSEFULLNAME)
IF SPOUSEBIRTHDATE ~= "" THEN
WriteCh('GenealogyText',' * 'SPOUSEBIRTHDATE)
IF SPOUSEDEATHDATE ~= "" THEN
WriteCh('GenealogyText',' * 'SPOUSEDEATHDATE)
WriteLn('GenealogyText','')
END
WriteLn('PERSONFILE','<BR>')
indent2 = indent || " | "
DO k = 0 TO 39 /* ??? GETTOTCHILDREN FGRN ??? */
'GETCHILD' mFGRN k
mFGRNc = RESULT
'GETFIRSTNAME' mFGRNc
mFGRNcFIRSTNAME = RESULT
/**/
IF mFGRNcFIRSTNAME ~= "" THEN DO
'GETLASTNAME' mFGRNc
mFGRNcLASTNAME = GetLastName(RESULT)
'GETFIRSTNAME' mFGRNc
mFGRNcFIRSTNAME = RESULT
'GETSEX' mFGRNc
mFGRNcGENDER = translate(RESULT,xrange('a','z'),xrange('A','Z'))
thelastname = mFGRNcLASTNAME
thegender = mFGRNcGENDER
mFGRNcFULLNAME = GetFullName(mFGRNcFIRSTNAME)
MmFGRNcFULLNAME = MGetFullName(mFGRNcFIRSTNAME)
PmFGRNcFULLNAME = PGetFullName(mFGRNcFIRSTNAME)
'GETBIRTHDATE' mFGRNc
mFGRNcBIRTHDATE = RESULT
'GETDEATHDATE' mFGRNc
mFGRNcDEATHDATE = RESULT
/**/
IF mFGRNcBIRTHDATE = "" THEN
mFGRNcFILENAME = Space(substr(mFGRNcFIRSTNAME,1,2) substr(mFGRNcLASTNAME,1,6) mFGRNc)
ELSE
mFGRNcFILENAME = Space(substr(mFGRNcFIRSTNAME,1,2) substr(mFGRNcLASTNAME,1,4) mFGRNcBIRTHDATE)
/**/
WriteCh('PERSONFILE',indent2||'<A HREF="'mFGRNcFILENAME'.html">'MmFGRNcFULLNAME'</A> ')
/**/
IF mFGRNcBIRTHDATE ~= "" THEN
WriteCh('PERSONFILE',' * 'mFGRNcBIRTHDATE)
/**/
IF mFGRNcDEATHDATE ~= "" THEN
WriteCh('PERSONFILE',' + 'mFGRNcDEATHDATE)
Writeln('PERSONFILE','<BR>')
IF DoGenText THEN DO
WriteCh('GenealogyText',indent2||PmFGRNcFULLNAME)
IF mFGRNcBIRTHDATE ~= "" THEN WriteCh('GenealogyText',' * 'mFGRNcBIRTHDATE)
IF mFGRNcDEATHDATE ~= "" THEN WriteCh('GenealogyText',' + 'mFGRNcDEATHDATE)
WriteLn('GenealogyText','')
END
/**********************/
marriagesANDchildren(mFGRNc,indent2)
END
END
END
END
END
RETURN 0
GetRIRN: PROCEDURE
PARSE ARG numb ">" last
IF last = "" THEN RETURN 0
IF IsNumeric(numb) THEN RETURN numb
RETURN 0
GetaRIRN: PROCEDURE
PARSE ARG numb "]" last
IF last = "" THEN RETURN 0
IF IsNumeric(numb) THEN RETURN numb
RETURN 0
GetEnd: PROCEDURE
PARSE ARG line ">" last
IF last = "" THEN RETURN substr(line,1,length(line)-1)
RETURN substr(last,1,length(last)-1)
GetaEnd: PROCEDURE
PARSE ARG line "]" last
IF last = "" THEN RETURN substr(line,1,length(line)-1)
RETURN substr(last,1,length(last)-1)
GetLength: PROCEDURE
PARSE UPPER ARG names
nonletters = length(compress(names, xrange('A','Z')))
RETURN Length(names) - nonletters * 4 / 10
/* create a full name from first, last, and honorifics parts */
GetFullName: PROCEDURE EXPOSE thelastname
PARSE ARG firstnames "," hon
IF hon = "" THEN DO
IF length(firstnames) > 2 THEN
IF substr(firstnames,length(firstnames)-1,length(firstnames)) = "V." THEN
firstnames = substr(firstnames,1,length(firstnames)-2) || "v."
RETURN firstnames thelastname
END
RETURN firstnames Space(thelastname) || ","hon
MGetFullName: PROCEDURE EXPOSE thelastname thegender
PARSE ARG firstnames "," hon
gchar = "B"
IF thegender = "f" THEN gchar = "I"
IF hon = "" THEN DO
IF length(firstnames) > 2 THEN
IF substr(firstnames,length(firstnames)-1,length(firstnames)) = "V." THEN
firstnames = substr(firstnames,1,length(firstnames)-2) || "v."
RETURN "<"gchar">"firstnames thelastname"</"gchar">"
END
RETURN "<"gchar">"firstnames Space(thelastname) || ","hon"</"gchar">"
PGetFullName: PROCEDURE EXPOSE thelastname thegender
PARSE ARG firstnames "," hon
schar = "1"
uchar = "2"
IF thegender = "f" THEN DO
schar = "3"
uchar = "3"
END
IF hon = "" THEN DO
IF length(firstnames) > 2 THEN
IF substr(firstnames,length(firstnames)-1,length(firstnames)) = "V." THEN
firstnames = substr(firstnames,1,length(firstnames)-2) || "v."
RETURN ""schar"m"firstnames thelastname""uchar"m"
END
RETURN ""schar"m"firstnames Space(thelastname) || ","hon""uchar"m"
/* Capitalize last name; also handle special cases! */
/* End users must customize this code to aviod trashy output */
GetLastName: PROCEDURE
PARSE ARG str
IF str = "BAUER-GAUSS" THEN RETURN "Bauer-Gauss"
IF str = "DE IPOLYI" THEN RETURN "deIpolyi"
IF str = "DEIPOLYI" THEN RETURN "deIpolyi"
IF str = "MC GRADY" THEN RETURN "McGrady"
IF str = "KIS RED" THEN RETURN "KisRed"
IF str = "ROTH-HACKENSCHMIDT" THEN RETURN "Roth-Hackenschmidt"
IF str = "SCHüCH-GLICKHFELDEN" THEN RETURN "Schüch-Glickhfelden"
ELSE
DO
spart = translate(substr(str,2,length(str)),xrange('a','z'),xrange('A','Z'))
END
RETURN substr(str,1,1)Space(spart)